{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-06-07T08:53:52.231305500Z",
     "start_time": "2025-06-07T08:53:52.226738100Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.preprocessing import LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1100 entries, 0 to 1099\n",
      "Data columns (total 31 columns):\n",
      " #   Column                    Non-Null Count  Dtype \n",
      "---  ------                    --------------  ----- \n",
      " 0   Attrition                 1100 non-null   int64 \n",
      " 1   Age                       1100 non-null   int64 \n",
      " 2   BusinessTravel            1100 non-null   object\n",
      " 3   Department                1100 non-null   object\n",
      " 4   DistanceFromHome          1100 non-null   int64 \n",
      " 5   Education                 1100 non-null   int64 \n",
      " 6   EducationField            1100 non-null   object\n",
      " 7   EmployeeNumber            1100 non-null   int64 \n",
      " 8   EnvironmentSatisfaction   1100 non-null   int64 \n",
      " 9   Gender                    1100 non-null   object\n",
      " 10  JobInvolvement            1100 non-null   int64 \n",
      " 11  JobLevel                  1100 non-null   int64 \n",
      " 12  JobRole                   1100 non-null   object\n",
      " 13  JobSatisfaction           1100 non-null   int64 \n",
      " 14  MaritalStatus             1100 non-null   object\n",
      " 15  MonthlyIncome             1100 non-null   int64 \n",
      " 16  NumCompaniesWorked        1100 non-null   int64 \n",
      " 17  Over18                    1100 non-null   object\n",
      " 18  OverTime                  1100 non-null   object\n",
      " 19  PercentSalaryHike         1100 non-null   int64 \n",
      " 20  PerformanceRating         1100 non-null   int64 \n",
      " 21  RelationshipSatisfaction  1100 non-null   int64 \n",
      " 22  StandardHours             1100 non-null   int64 \n",
      " 23  StockOptionLevel          1100 non-null   int64 \n",
      " 24  TotalWorkingYears         1100 non-null   int64 \n",
      " 25  TrainingTimesLastYear     1100 non-null   int64 \n",
      " 26  WorkLifeBalance           1100 non-null   int64 \n",
      " 27  YearsAtCompany            1100 non-null   int64 \n",
      " 28  YearsInCurrentRole        1100 non-null   int64 \n",
      " 29  YearsSinceLastPromotion   1100 non-null   int64 \n",
      " 30  YearsWithCurrManager      1100 non-null   int64 \n",
      "dtypes: int64(23), object(8)\n",
      "memory usage: 266.5+ KB\n"
     ]
    },
    {
     "data": {
      "text/plain": "      Attrition  Age     BusinessTravel              Department  \\\n0             0   37      Travel_Rarely  Research & Development   \n1             0   54  Travel_Frequently  Research & Development   \n2             1   34  Travel_Frequently  Research & Development   \n3             0   39      Travel_Rarely  Research & Development   \n4             1   28  Travel_Frequently  Research & Development   \n...         ...  ...                ...                     ...   \n1095          0   35      Travel_Rarely  Research & Development   \n1096          0   38      Travel_Rarely                   Sales   \n1097          0   37      Travel_Rarely                   Sales   \n1098          1   22      Travel_Rarely  Research & Development   \n1099          1   26  Travel_Frequently  Research & Development   \n\n      DistanceFromHome  Education EducationField  EmployeeNumber  \\\n0                    1          4  Life Sciences              77   \n1                    1          4  Life Sciences            1245   \n2                    7          3  Life Sciences             147   \n3                    1          1  Life Sciences            1026   \n4                    1          3        Medical            1111   \n...                ...        ...            ...             ...   \n1095                23          4        Medical              75   \n1096                 2          4      Marketing            1835   \n1097                16          4      Marketing             868   \n1098                 7          1  Life Sciences            1878   \n1099                 2          3  Life Sciences            1053   \n\n      EnvironmentSatisfaction  Gender  ...  RelationshipSatisfaction  \\\n0                           1    Male  ...                         3   \n1                           4  Female  ...                         1   \n2                           1    Male  ...                         4   \n3                           4  Female  ...                         3   \n4                           1    Male  ...                         1   \n...                       ...     ...  ...                       ...   \n1095                        3  Female  ...                         3   \n1096                        2  Female  ...                         1   \n1097                        4    Male  ...                         4   \n1098                        4    Male  ...                         1   \n1099                        1    Male  ...                         2   \n\n      StandardHours StockOptionLevel  TotalWorkingYears TrainingTimesLastYear  \\\n0                80                1                  7                     2   \n1                80                1                 33                     2   \n2                80                0                  9                     3   \n3                80                1                 21                     3   \n4                80                2                  1                     2   \n...             ...              ...                ...                   ...   \n1095             80                1                  4                     3   \n1096             80                2                 20                     4   \n1097             80                2                  9                     2   \n1098             80                0                  1                     2   \n1099             80                1                  6                     2   \n\n      WorkLifeBalance  YearsAtCompany YearsInCurrentRole  \\\n0                   4               7                  5   \n1                   1               5                  4   \n2                   3               9                  7   \n3                   3              21                  6   \n4                   3               1                  0   \n...               ...             ...                ...   \n1095                3               2                  2   \n1096                2               4                  2   \n1097                3               1                  0   \n1098                3               1                  0   \n1099                3               3                  2   \n\n     YearsSinceLastPromotion  YearsWithCurrManager  \n0                          0                     7  \n1                          1                     4  \n2                          0                     6  \n3                         11                     8  \n4                          0                     0  \n...                      ...                   ...  \n1095                       2                     2  \n1096                       0                     3  \n1097                       0                     0  \n1098                       0                     0  \n1099                       1                     2  \n\n[1100 rows x 31 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Attrition</th>\n      <th>Age</th>\n      <th>BusinessTravel</th>\n      <th>Department</th>\n      <th>DistanceFromHome</th>\n      <th>Education</th>\n      <th>EducationField</th>\n      <th>EmployeeNumber</th>\n      <th>EnvironmentSatisfaction</th>\n      <th>Gender</th>\n      <th>...</th>\n      <th>RelationshipSatisfaction</th>\n      <th>StandardHours</th>\n      <th>StockOptionLevel</th>\n      <th>TotalWorkingYears</th>\n      <th>TrainingTimesLastYear</th>\n      <th>WorkLifeBalance</th>\n      <th>YearsAtCompany</th>\n      <th>YearsInCurrentRole</th>\n      <th>YearsSinceLastPromotion</th>\n      <th>YearsWithCurrManager</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>37</td>\n      <td>Travel_Rarely</td>\n      <td>Research &amp; Development</td>\n      <td>1</td>\n      <td>4</td>\n      <td>Life Sciences</td>\n      <td>77</td>\n      <td>1</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>3</td>\n      <td>80</td>\n      <td>1</td>\n      <td>7</td>\n      <td>2</td>\n      <td>4</td>\n      <td>7</td>\n      <td>5</td>\n      <td>0</td>\n      <td>7</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>54</td>\n      <td>Travel_Frequently</td>\n      <td>Research &amp; Development</td>\n      <td>1</td>\n      <td>4</td>\n      <td>Life Sciences</td>\n      <td>1245</td>\n      <td>4</td>\n      <td>Female</td>\n      <td>...</td>\n      <td>1</td>\n      <td>80</td>\n      <td>1</td>\n      <td>33</td>\n      <td>2</td>\n      <td>1</td>\n      <td>5</td>\n      <td>4</td>\n      <td>1</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>34</td>\n      <td>Travel_Frequently</td>\n      <td>Research &amp; Development</td>\n      <td>7</td>\n      <td>3</td>\n      <td>Life Sciences</td>\n      <td>147</td>\n      <td>1</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>4</td>\n      <td>80</td>\n      <td>0</td>\n      <td>9</td>\n      <td>3</td>\n      <td>3</td>\n      <td>9</td>\n      <td>7</td>\n      <td>0</td>\n      <td>6</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0</td>\n      <td>39</td>\n      <td>Travel_Rarely</td>\n      <td>Research &amp; Development</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Life Sciences</td>\n      <td>1026</td>\n      <td>4</td>\n      <td>Female</td>\n      <td>...</td>\n      <td>3</td>\n      <td>80</td>\n      <td>1</td>\n      <td>21</td>\n      <td>3</td>\n      <td>3</td>\n      <td>21</td>\n      <td>6</td>\n      <td>11</td>\n      <td>8</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1</td>\n      <td>28</td>\n      <td>Travel_Frequently</td>\n      <td>Research &amp; Development</td>\n      <td>1</td>\n      <td>3</td>\n      <td>Medical</td>\n      <td>1111</td>\n      <td>1</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>1</td>\n      <td>80</td>\n      <td>2</td>\n      <td>1</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1095</th>\n      <td>0</td>\n      <td>35</td>\n      <td>Travel_Rarely</td>\n      <td>Research &amp; Development</td>\n      <td>23</td>\n      <td>4</td>\n      <td>Medical</td>\n      <td>75</td>\n      <td>3</td>\n      <td>Female</td>\n      <td>...</td>\n      <td>3</td>\n      <td>80</td>\n      <td>1</td>\n      <td>4</td>\n      <td>3</td>\n      <td>3</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1096</th>\n      <td>0</td>\n      <td>38</td>\n      <td>Travel_Rarely</td>\n      <td>Sales</td>\n      <td>2</td>\n      <td>4</td>\n      <td>Marketing</td>\n      <td>1835</td>\n      <td>2</td>\n      <td>Female</td>\n      <td>...</td>\n      <td>1</td>\n      <td>80</td>\n      <td>2</td>\n      <td>20</td>\n      <td>4</td>\n      <td>2</td>\n      <td>4</td>\n      <td>2</td>\n      <td>0</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>1097</th>\n      <td>0</td>\n      <td>37</td>\n      <td>Travel_Rarely</td>\n      <td>Sales</td>\n      <td>16</td>\n      <td>4</td>\n      <td>Marketing</td>\n      <td>868</td>\n      <td>4</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>4</td>\n      <td>80</td>\n      <td>2</td>\n      <td>9</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1098</th>\n      <td>1</td>\n      <td>22</td>\n      <td>Travel_Rarely</td>\n      <td>Research &amp; Development</td>\n      <td>7</td>\n      <td>1</td>\n      <td>Life Sciences</td>\n      <td>1878</td>\n      <td>4</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>1</td>\n      <td>80</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1099</th>\n      <td>1</td>\n      <td>26</td>\n      <td>Travel_Frequently</td>\n      <td>Research &amp; Development</td>\n      <td>2</td>\n      <td>3</td>\n      <td>Life Sciences</td>\n      <td>1053</td>\n      <td>1</td>\n      <td>Male</td>\n      <td>...</td>\n      <td>2</td>\n      <td>80</td>\n      <td>1</td>\n      <td>6</td>\n      <td>2</td>\n      <td>3</td>\n      <td>3</td>\n      <td>2</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n<p>1100 rows × 31 columns</p>\n</div>"
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('../../data/raw/train.csv')\n",
    "data.info()\n",
    "data"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T08:54:01.773267800Z",
     "start_time": "2025-06-07T08:54:01.737703200Z"
    }
   },
   "id": "dbe0a667d55b564e"
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "outputs": [
    {
     "data": {
      "text/plain": "      Attrition  Age  BusinessTravel  Department  DistanceFromHome  Education  \\\n0             0   37               2           1                 1          3   \n1             0   54               1           1                 1          3   \n2             1   34               1           1                 7          2   \n3             0   39               2           1                 1          0   \n4             1   28               1           1                 1          2   \n...         ...  ...             ...         ...               ...        ...   \n1095          0   35               2           1                23          3   \n1096          0   38               2           2                 2          3   \n1097          0   37               2           2                16          3   \n1098          1   22               2           1                 7          0   \n1099          1   26               1           1                 2          2   \n\n      EducationField  EmployeeNumber  EnvironmentSatisfaction  Gender  ...  \\\n0                  1              77                        0       1  ...   \n1                  1            1245                        3       0  ...   \n2                  1             147                        0       1  ...   \n3                  1            1026                        3       0  ...   \n4                  3            1111                        0       1  ...   \n...              ...             ...                      ...     ...  ...   \n1095               3              75                        2       0  ...   \n1096               2            1835                        1       0  ...   \n1097               2             868                        3       1  ...   \n1098               1            1878                        3       1  ...   \n1099               1            1053                        0       1  ...   \n\n      RelationshipSatisfaction  StandardHours  StockOptionLevel  \\\n0                            2             80                 1   \n1                            0             80                 1   \n2                            3             80                 0   \n3                            2             80                 1   \n4                            0             80                 2   \n...                        ...            ...               ...   \n1095                         2             80                 1   \n1096                         0             80                 2   \n1097                         3             80                 2   \n1098                         0             80                 0   \n1099                         1             80                 1   \n\n      TotalWorkingYears  TrainingTimesLastYear  WorkLifeBalance  \\\n0                     7                      2                3   \n1                    33                      2                0   \n2                     9                      3                2   \n3                    21                      3                2   \n4                     1                      2                2   \n...                 ...                    ...              ...   \n1095                  4                      3                2   \n1096                 20                      4                1   \n1097                  9                      2                2   \n1098                  1                      2                2   \n1099                  6                      2                2   \n\n      YearsAtCompany YearsInCurrentRole  YearsSinceLastPromotion  \\\n0                  7                  5                        0   \n1                  5                  4                        1   \n2                  9                  7                        0   \n3                 21                  6                       11   \n4                  1                  0                        0   \n...              ...                ...                      ...   \n1095               2                  2                        2   \n1096               4                  2                        0   \n1097               1                  0                        0   \n1098               1                  0                        0   \n1099               3                  2                        1   \n\n      YearsWithCurrManager  \n0                        7  \n1                        4  \n2                        6  \n3                        8  \n4                        0  \n...                    ...  \n1095                     2  \n1096                     3  \n1097                     0  \n1098                     0  \n1099                     2  \n\n[1100 rows x 31 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Attrition</th>\n      <th>Age</th>\n      <th>BusinessTravel</th>\n      <th>Department</th>\n      <th>DistanceFromHome</th>\n      <th>Education</th>\n      <th>EducationField</th>\n      <th>EmployeeNumber</th>\n      <th>EnvironmentSatisfaction</th>\n      <th>Gender</th>\n      <th>...</th>\n      <th>RelationshipSatisfaction</th>\n      <th>StandardHours</th>\n      <th>StockOptionLevel</th>\n      <th>TotalWorkingYears</th>\n      <th>TrainingTimesLastYear</th>\n      <th>WorkLifeBalance</th>\n      <th>YearsAtCompany</th>\n      <th>YearsInCurrentRole</th>\n      <th>YearsSinceLastPromotion</th>\n      <th>YearsWithCurrManager</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>37</td>\n      <td>2</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>1</td>\n      <td>77</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>2</td>\n      <td>80</td>\n      <td>1</td>\n      <td>7</td>\n      <td>2</td>\n      <td>3</td>\n      <td>7</td>\n      <td>5</td>\n      <td>0</td>\n      <td>7</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>54</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>1</td>\n      <td>1245</td>\n      <td>3</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>80</td>\n      <td>1</td>\n      <td>33</td>\n      <td>2</td>\n      <td>0</td>\n      <td>5</td>\n      <td>4</td>\n      <td>1</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>34</td>\n      <td>1</td>\n      <td>1</td>\n      <td>7</td>\n      <td>2</td>\n      <td>1</td>\n      <td>147</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>3</td>\n      <td>80</td>\n      <td>0</td>\n      <td>9</td>\n      <td>3</td>\n      <td>2</td>\n      <td>9</td>\n      <td>7</td>\n      <td>0</td>\n      <td>6</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0</td>\n      <td>39</td>\n      <td>2</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1026</td>\n      <td>3</td>\n      <td>0</td>\n      <td>...</td>\n      <td>2</td>\n      <td>80</td>\n      <td>1</td>\n      <td>21</td>\n      <td>3</td>\n      <td>2</td>\n      <td>21</td>\n      <td>6</td>\n      <td>11</td>\n      <td>8</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1</td>\n      <td>28</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1111</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>0</td>\n      <td>80</td>\n      <td>2</td>\n      <td>1</td>\n      <td>2</td>\n      <td>2</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1095</th>\n      <td>0</td>\n      <td>35</td>\n      <td>2</td>\n      <td>1</td>\n      <td>23</td>\n      <td>3</td>\n      <td>3</td>\n      <td>75</td>\n      <td>2</td>\n      <td>0</td>\n      <td>...</td>\n      <td>2</td>\n      <td>80</td>\n      <td>1</td>\n      <td>4</td>\n      <td>3</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1096</th>\n      <td>0</td>\n      <td>38</td>\n      <td>2</td>\n      <td>2</td>\n      <td>2</td>\n      <td>3</td>\n      <td>2</td>\n      <td>1835</td>\n      <td>1</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>80</td>\n      <td>2</td>\n      <td>20</td>\n      <td>4</td>\n      <td>1</td>\n      <td>4</td>\n      <td>2</td>\n      <td>0</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>1097</th>\n      <td>0</td>\n      <td>37</td>\n      <td>2</td>\n      <td>2</td>\n      <td>16</td>\n      <td>3</td>\n      <td>2</td>\n      <td>868</td>\n      <td>3</td>\n      <td>1</td>\n      <td>...</td>\n      <td>3</td>\n      <td>80</td>\n      <td>2</td>\n      <td>9</td>\n      <td>2</td>\n      <td>2</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1098</th>\n      <td>1</td>\n      <td>22</td>\n      <td>2</td>\n      <td>1</td>\n      <td>7</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1878</td>\n      <td>3</td>\n      <td>1</td>\n      <td>...</td>\n      <td>0</td>\n      <td>80</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>2</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1099</th>\n      <td>1</td>\n      <td>26</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>2</td>\n      <td>1</td>\n      <td>1053</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>1</td>\n      <td>80</td>\n      <td>1</td>\n      <td>6</td>\n      <td>2</td>\n      <td>2</td>\n      <td>3</td>\n      <td>2</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n<p>1100 rows × 31 columns</p>\n</div>"
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from src.zhangyu import label_encode\n",
    "\n",
    "label_encoder = LabelEncoder()\n",
    "cols = [\n",
    "    \"BusinessTravel\", \"Department\", \"Education\", \"EducationField\",\n",
    "    \"EnvironmentSatisfaction\", \"Gender\", \"JobInvolvement\", \"JobLevel\", \"JobRole\",\n",
    "    \"JobSatisfaction\", \"MaritalStatus\", \"OverTime\", \"PerformanceRating\",\n",
    "    \"RelationshipSatisfaction\", \"TrainingTimesLastYear\", \"StockOptionLevel\", \"WorkLifeBalance\"\n",
    "]\n",
    "data = label_encode.encode(data, cols)\n",
    "data"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T08:54:06.047780600Z",
     "start_time": "2025-06-07T08:54:06.026200800Z"
    }
   },
   "id": "94beb41761cbcf0"
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Attrition 2\n",
      "Age 43\n",
      "BusinessTravel 3\n",
      "Department 3\n",
      "DistanceFromHome 29\n",
      "Education 5\n",
      "EducationField 6\n",
      "EmployeeNumber 1100\n",
      "EnvironmentSatisfaction 4\n",
      "Gender 2\n",
      "JobInvolvement 4\n",
      "JobLevel 5\n",
      "JobRole 9\n",
      "JobSatisfaction 4\n",
      "MaritalStatus 3\n",
      "MonthlyIncome 1028\n",
      "NumCompaniesWorked 10\n",
      "Over18 1\n",
      "OverTime 2\n",
      "PercentSalaryHike 15\n",
      "PerformanceRating 2\n",
      "RelationshipSatisfaction 4\n",
      "StandardHours 1\n",
      "StockOptionLevel 4\n",
      "TotalWorkingYears 40\n",
      "TrainingTimesLastYear 7\n",
      "WorkLifeBalance 4\n",
      "YearsAtCompany 35\n",
      "YearsInCurrentRole 19\n",
      "YearsSinceLastPromotion 16\n",
      "YearsWithCurrManager 18\n"
     ]
    }
   ],
   "source": [
    "# 查看每一列的分类个数\n",
    "for col in data.columns:\n",
    "    print(col, len(data[col].unique()))\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T08:54:12.128470600Z",
     "start_time": "2025-06-07T08:54:12.113667300Z"
    }
   },
   "id": "3ee306b92807c155"
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.15159658 0.12668827 0.1925145  0.07568622 0.10589277 0.10845331\n",
      " 0.06849133 0.05277702 0.05383192 0.0640681 ]\n"
     ]
    },
    {
     "data": {
      "text/plain": "<BarContainer object of 10 artists>"
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 3000x1500 with 1 Axes>",
      "image/png": "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AAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACA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AAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhE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AAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAACAH5T29vZGbwEAAACY4kRVAAAAADBJ1W+uN3oLd5xSqRQ9PT1RKpUavZU7jusVAAAAatfW6A0AAAAAQLMqtbbE717/e3xyrtLorcC4fvGzjtj15AON3gYAAAA0DVEVAAAAAHwHn5yrxD/OXGr0NgAAAAC4jXz9HwAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAAAAAAAAiagKAAAAAAAAAAAgEVUBAAAAAAAAAAAkoioAAAAAAAAAAIBEVAUAAAAAAAAAAJCIqgAAAAAAAAAAABJRFQAAAAAAAAAAQCKqAgAAAAAAAAAASERVAAAAAJPQ3t7e6C0AAAAAAAURVQEAAMAdrvrN9UZv4Y5TKpWip6cnSqVSo7dyR3LNAgAAANBobY3eAAAAAFCsUmtL/O71v8cn5yqN3gpM6Bc/64hdTz7Q6G0AAAAAMMWJqgAAAGAK+ORcJf5x5lKjtwEAAAAA0BR8/R8AAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAImoCgAAAAAAAAAAIBFVAQAAAAAAAAAAJKIqAAAAAAAAAACARFQFAAAAAAAAAACQiKoAAAAAAAAAAAASURUAAAAAAAAAAEAiqgIAAAAAAAAAAEhEVQAAAAAAAAAAAEldUdWpU6di+fLl0d/fH9u2bYvr16/XtO7zzz+PhQsX3nT83XffjcceeyweeuiheO2112o+BwAAAAAAAAAAUJSao6qRkZEYHByM3t7eeOONN2J4eDj2798/4bovvvgiBgYG4uLFi2OOnz9/Pp599tl4/PHHY+/evXHw4ME4evTohOcAAAAAAAAAAACKVHNUdeTIkahUKrFhw4a47777Yu3atbFv374J161evTpWrFhx0/E333wzZs+eHc8//3z8/Oc/j+eee2708cY7BwAAAAAAAAAAUKS2Wu948uTJWLBgQbS3t0dERHd3dwwPD0+47pVXXomWlpbYsWPHmONDQ0OxaNGiaGlpiYiI+++/P3bu3DnhuXpVq9VJreP7USqVGr0FqFuzvK6YL5pNs8xWhPmi+TTTfHH73fj7dx1Mbd67aEbN8rplvmg2zTJbFMO/DaEYZguKY76gOOaLqazW677mqKpSqcScOXNGb7e0tERra2tcvHgxOjs7b7nu3nvvjdOnT3/r482bN2/0dkdHR5w9e3bCc/Uql8uTWkfx2tvbo6enp9HbgLoNDQ3FV1991ehtjMt80YyaYbYizBfNqVnmi2L53Wjq8t5Fs2qG9y/zRTNqhtmieP5tCMUwW1Ac8wXFMV9wazVHVaVSKaZPnz7m2IwZM+Lq1avjRlW1Pt6Nx5roXL36+vr8H4PAbdXd3d3oLcAdyWxBcczX1FatVqNcLvvdCGg63r+gGGZravNvQyiG2YLimC8ojvliKrtx/U+k5qiqs7MzPv744zHHrly5EtOmTat/d///8c6fP/+tjzXeuXqVSiUvAMBt5TUFimG2oDjmiwi/GwHNx2sWFMNsEeHfhlAUswXFMV9QHPMFt9Za6x37+vri2LFjo7dPnz4dIyMjk/qUqm97vI8++ii6uromPAcAAAAAAAAAAFCkmqOq/v7+uHz5chw4cCAiInbv3h2LFy+OUqkUlUolvv7667qe+NFHH40PPvggjh49GteuXYtXX301lixZMuE5AAAAAAAAAACAItX89X9tbW2xZcuWWLduXWzfvj2q1Wrs2bMnIiKWLVsWGzdujKVLl9b8xLNmzYr169fHM888Ex0dHXHXXXfFiy++OOE5AAAAAAAAAACAItUcVUVELF26NA4dOhTlcjkefPDBmDVrVkREHD58eNx1c+bMiaGhoZuOP/3007FkyZIYHh6OhQsXRkdHR03nAAAAAAAAAAAAilJXVBUR0dXVFV1dXbdtA3Pnzo25c+fWfQ4AAAAAAAAAAKAIrY3eAAAAAAAAAAAAwA+JqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAAAAAAAABAIqoCAAAAAAAAAABIRFUAAAAAAAAAAACJqAoAAAAAAAAAACARVQEAAAAAAAAAACSiKgAAAAAAAAAAgERUBQAAAAAAAAAAkIiqAAAAAAAAAAAAElEVAAAA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FAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAAFAhVAQAAAAAAAAAA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CoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACoSqAAAAAAAAAAAACpYpVPXKK69k0KBB2WqrrXLBBRdk8eLFNbaZOHFiBgwYkN69e+faa69dIdsAAAAAAAAAAADqS61DVfPnz89RRx2VLl265I477siUKVMyZsyYatvMmjUrRx99dHbbbbfccsstGTduXCZMmLBc2wAAAAAAAAAAAOrTarW944MPPpjZs2dnxIgRadq0aU488cSMHDkygwYNqrLN3XffnXXXXTfHHntsGjVqlGOOOSa33357tt566zpvq62KVbTmz5+fsrKyWrfjy1VWVpbvtG2eNfwTsQr41rrNs3DhwixcuLChu1Ir6otVxapWW4n6YtWxqtWX2mJVor6g/qgvqB9qC+qP+oL6o76gfqgtqD+rWn19XVX8+9R0hb5Gi2tzDb8kl19+eSZPnpzf/e53pQfu3bt3Jk6cWGWbESNGZI011shZZ52VJJk5c2YOPfTQ/OlPf6rzttqaP39+nnvuuVrfHwAAAAAAAAAA+Hro2rVrVl999Sq313qlqtmzZ6d9+/al240aNUrjxo3z4YcfZu21166yzcYbb1y63aJFi8yYMWO5ttXWaqutlq5du6Zx48Zp1KjRMrUFAAAAAAAAAAC+ehYvXpxFixZltdWqj03VOlRVVla2RDprjTXWyKefflplqOqLbSruvzzbaqtx48bVpskAAAAAAAAAAACWpnFt77j22mtn1qxZlX43Z86cNGnSpNZtivev6zYAAAAAAAAAAID6VOtQVdeuXTN58uTS7XfeeSfz58+vcpWqpbV58cUX06ZNm+XaBgAAAAAAAAAAUJ9qHaraaqut8vHHH2fs2LFJkiuvvDLbbrttysrKMnv27Hz22WdLtOnXr1+efPLJTJgwIQsWLMg111yTPn36LNc2AAAAAAAAAACA+tRo8eLFi2t75/vuuy8nnXRSmjdvnoULF+aGG27It7/97fTr1y+nnXZa+vfvv0SbG2+8Meeff35atGiRZs2a5dZbb80666yzXNsAAAAAAAAAAADqyzKFqpJkxowZee6559KjR4+0atWqVm3eeuutTJkyJb169UqLFi1WyDYAAAAAAAAAAID6sMyhKgAAAAAAAAAAgK+yxg3dAQAAAAAAAAAAgJWJUBUAAAAAAAAAAECBUBWsgh577LGUl5dnxowZDd0VWKoxY8akvLw83/nOd7LDDjtk9OjRmT9/fmn7O++8k/Ly8gbsYd2deuqpKS8vX+JnwYIF9fJ8Bx10UP73f/+3dHvMmDHZc8896+W5+Gq57LLLUl5envHjxydJbrzxxpSXl2fMmDEr/Lkef/zx9OvXr9r71LXuH3/88fTs2bOuXYNKLrvssnTr1i0fffRRkv/sl++8806dH3P69Ok55JBD0q1bt/zwhz/M22+/vaK6u8LVplZrY8KECendu3eSZPjw4fnRj36UJNlyyy3zxBNP1PlxL7vsspx66qnL3b9TTz01l1122XI/Dsvn8ccfL82TunTpkoEDB+ahhx5q6G4tkzvuuCN9+/ZN796987Of/azSfLYmK2p/rklt5opL68uX1T9WvIrPWl/8efzxx+vtOZc2j+vbt2/Gjx+f+++/P5tuumk+/fTTnHPOOfnpT3+6Qp+nLvepraOPPjoXXHBB6fZ7772XzTbbLG+88cYKeXy+us4555wcf/zxpdtz585Nr1698thjjzVIf37yk5/k8MMPX6Y2jz/+eHbdddf07Nkzp5xySj755JN66h1fVytbnZx66qk599xzl6nNn/70p/Tr1y+9e/fO+eefX2/H/upLxRxh0003zXe/+91cdNFFWbx4ca3bH3TQQfVyDOnrbGWqi9/85jfp06dPtttuu/ziF79YYt/4sj5Xl5eX58UXX6z350n+M4+s+N5i5513ztixY7+U566r5T1mxZJWhjqs7XG1Zf3cXlPdfpnzv4rxs8K+++67yn4nCIlQFaySHn744STJo48+2sA9gap16tQpDz30UE4//fSMGzcuI0eOLG1r165dJk2atMyP2a9fv3r9sqC2Bg8enEmTJlX6WW211Rq6W7BUr776apLktddeWyGP56Aaq7q5c+fmjjvuWCGPtXjx4hx77LFp165dxo0blx49euT4449fpgPVX6Ytt9wyd99993I/Trt27fLvf/878+fPz9SpU/P2229n7ty5mT17dtq1a7cCespXRYsWLTJp0qSMHz8+Bx10UI4//viV8sSQpR2ofu655zJ69OhcfPHFueGGG/L444/npptuaqAeLp9hw4blzDPPbOhusILsvvvumTRpUm688cYkKX0e2XLLLWtsuyLnceuvv37++c9/ZurUqVm8eHGmTp2af/7zn1l//fVXyONXpa6fJZdm6NChue222zJnzpwkyfXXX59+/frlm9/85gp5fL66DjvssPztb38rjR133nln2rdvn2222aZB+vPYY4/liSeeyLx58yr9vqoQ4owZM3L00UfngAMOyJ133pn3338/v/jFL76s7vI1sbLVybJ6/vnnc9ppp+XHP/5xbr755kyYMCE33HBDQ3drqcaMGZODDjpoqdtuvPHGPProoxk1alRuu+22FfZZmLpZWerir3/9a26//fZcc801+dWvfpWbb745999/f6X7nHnmmRk2bNiX2q8VqbpwyQMPPJCHH344J598cs4888z84x//+JJ79x81hWAmTZrkOMsKtjLUYW2Pq1X1Wb4uJ5o0xPzv3//+d95///0sXrw4U6ZMqdfngvomVAWroEcffTS9evXKI4880tBdgSo1btw466yzTvr375/zzjsvY8eOzb///e/StpYtWzZsB5fD6quvnpYtW1b6gZVRWVlZKUz16quvpqysrIF7BA2vrKwsv//971dI8Onxxx/P1KlTc9ZZZ2XDDTfMsccem9dee22FhRhXtNVWWy0tWrRY7sdp27ZtGjdunPfffz/Tpk3LO++8k5kzZ6asrCxt2rRZAT3lq6JRo0Zp2bJl1ltvvey///5p3779CgtD1LdJkyalS5cu6d69e7797W/n6KOPzscff9zQ3aqTNdZYI02bNm3obrCCVHwWad68eZKUPo982Sd5tGvXLjNnzszUqVPTpEmTvP3225k5c2Y22GCDen3eFflZskePHvn2t7+dMWPGZO7cubntttsyZMiQFfLYfLVtsMEG2XnnnXPDDTdk8eLF+b//+78MHTq0Qfry0ksvZfHixdlggw3y5JNP1qrNLbfckh49euSggw7KhhtumKFDh2bcuHH13FO+blamOqmL66+/PnvuuWd23XXXfPOb38zBBx+8StZJ8+bN06pVq2y77bbZcccdGzQ8wspTFxMnTsw222yTTp06pVu3bhkyZEjef//9Svdp2rRp1lhjjS+9b1+GtdZaK61bt07//v2zzTbbrNQrKrds2TKNG/sqf0VaGeqwtsfVVuRn+YaY/5WVleXVV1/NO++8s0T4H1Y13olhFTNr1qy89NJLOfzww/PYY4+VvhB86aWXsvvuu5eWI/7+97+f66+/Pkny4IMPZuDAgenZs2d++tOfLtNlK2BF2GabbdKoUaPSUr5VJekffvjhDBgwIFtssUUGDx5cuoTSEUcckfLy8rz77rs5+OCDU15eniuvvLLU7p577skuu+ySbt265aCDDiqtgFBxptatt96abbfdNttss03+8pe/lNo99thjGThwYLp3754hQ4bkvffeK22ra92Ul5fn1VdfzRlnnJFevXpV+vLtxhtvTL9+/dKnT59cdtllWbRoUelvccEFF2SbbbbJDTfckF133TW77bZb6Yzp6tTlMRcvXpyrrroqffv2TZ8+fXLdddfV6rWx6tlss81K4Y7XX389nTt3TpK88sorOeCAA7Lllltm6NChpX2/4tJg999/f/r27Zutttoq//d//5ckOeOMM1JeXp6JEydmxIgRKS8vzxlnnFHp+ZbWrjpjx47N7rvvXro9Z86cdO3atcYzV5antidNmpQ999wzW221VU466aTSZeD69euXM844I9ttt10uvPDCHH300dl6663z/PPPJzGWfpX06tUrs2bNyoMPPlj63cSJEyud2Vscp6rbN5566ql06dKldKBxjTXWyCGHHFI64FWX/e2yyy7LkCFD8sMf/jBbbrllfvSjH2X27NmlvtV1zEuqvvxfdfv31VdfnT59+qRHjx458cQTM3/+/Ky++upp3bp1XnzxxbRu3TprrbVWXnvttbRp06YU3lza+FShurGywpQpU7LtttuWVmitbuyaM2dOTjrppHTv3j0HHXRQPvzww6p3ABpUWVlZFixYkGeffTb77bdfttxyywwfPrzSPlCxks61116bvn37Vjpjui5zt4rl8i+//PL07Nkzffv2LS2n//3vf79U6zvuuGPKy8vzxz/+MUnSsWPHPPHEE6Xn33vvvTN8+PDS8/3yl7/Mtttum549e2bEiBFZuHBhrf4G1bWrqjYOOeSQXH311aX73XrrrfnBD35Qq+cr/g2qsiz1xsqtqjleTfO4J554InvuuWe22GKLDBo0KK+88kqNz1URqnr77bezzTbbLLFSVVV9Sf5zRv5dd92VXXbZZakrfyxcuDBHHnnkEvvu0j5LVjeHTao/XjJ06NBcf/31ueOOO7Lppptm8803L7UbO3Zsdt555/Tu3TsXX3xxpUB2XWp58eLFGTVqVHr37p2tttoq55xzzkq7uiU1GzJkSO644478+c9/zqJFi7LLLrskqX5eddNNN+V73/teunfvnmOOOabSHK9fv3559NFHc/HFF2e77bbLSy+9VNq2tPlYhUceeSRbbLFFttxyy0onX3bt2jU77rhjkv9cAuyZZ55Jkjz11FPp0aNH6b6bbLJJdtlll9J+XJfjDAcddFBOP/30fP/7388222yzxKobVdXMqaeemksuuSQjR45M9+7ds+uuu5Y+Dy7v+EfDW1nqpCoHHXRQbrzxxhx//PHp1q1b9t9///zzn/9MsmSdbLHFFqVVTL648mNxrlVRK7NmzcoJJ5yQHXbYoXS/6rZ99tlnGT16dPr06ZN+/frlT3/6U6XX/ac//SmHHHJItthiixxxxBGZO3dunnnmmZSXl2fEiBGZOHFiysvL07Vr16W+1hkzZuSJJ57IhhtumCSZN29eRo4cmd69e2eXXXbJPffcU+PfK0lmz56d0047Lb17986AAQMyceLEWrXjP1aGuujYsWPuu+++PPXUU0k+nw8NHjy4Uj+XtoJSdTWzYMGCUh/69OmTX/7yl6V21e3f1ZkxY0aOOOKIdO/ePf369at0jGPq1Kn54Q9/mG7dumXnnXcuHeO58sorU15enjvvvDOXX355ysvLc8QRR1T5HGVlZfnss8+S/KeWH3zwwey5554ZPXp06X7Tp0/PkCFDsuWWW+aAAw4oXRng1FNPzQknnJBddtklhx12WC699NL07NmztMpxVe1q28+lrapc1WNWvMc888wzGTBgQHr06FHpNfAfDV2HtTmuliz9s3x1c7zk889RS5tXVTf/+2K9f3EFxOqO41W3reK7iddee22J8akuc8Pq2iXJNddck969e2evvfbKOeeck549e+bjjz+u9j2o4rPk22+/nSOOOGKJ90KoIFQFq5hHHnkkG220Ubbddtt8+OGHefnll5MkZ511VgYOHJjrrrsut99+e84///zsscceefvtt3PMMcfkkEMOyZgxY/LCCy/kqquuauBXwdfNaqutlm984xuZNWtWtfc75ZRTsu++++avf/1rOnXqlEsuuSTJ55PHSZMmZf31189vfvObTJo0KYceemiSz5cQPfHEE3P00UfnnnvuyTe+8Y1cccUVpcd89dVX89e//jW///3vs/fee2fUqFFJPv+QcfTRR+ewww7Ln//857Rs2TL/7//9vySpsW5uuumm9OzZs/TF3Bedfvrpad68eS6//PLSmQR//etfc/nll+f888/Pb3/724wbN67Sgf527dplu+22y2WXXZbRo0dn+vTppcn3xRdfXHq+4mUU6/qYd911V6688spcfPHFueyyy3LJJZdUulY3Xx0dO3bMu+++mxkzZmSttdZK06ZN88knn+Twww/Pdtttl7vvvjvrr79+jjnmmFLg4YMPPsjvfve7/Pa3v81xxx2X0aNH59NPP81pp52WSZMmpUePHjnjjDMyadKknHbaaaXnqqpddfr375+33norr7/+epLPP7h+61vfysYbb1zja6tLbU+fPj3Dhg3LgQcemDFjxmTOnDmVPpjOnj07xxxzTK666qrss88+2WSTTfLQQw8ZS79imjVrlkGDBi3TpRuq2jdmzJiR1q1bV7rvT37yk2y88cZ13t+S5KGHHsq+++6bO+64I++++25pPKzrmFed6vbvKVOm5KKLLsovfvGL3HnnnXnrrbdKXx60a9cuTz75ZDp06JANN9wwTz75ZGmJ8prGp2TpY2WF999/P0ceeWROPvnk9OnTJ0mqHbt++ctf5s0338yYMWOyxx575IEHHqjxdfPle+SRR/LGG29kk002ydChQ/O9730v48aNy9y5c5fYV2+55ZZMmDAhZ599drp3755k+eZuf//73/P222/nzjvvTI8ePUpL3N9+++2llbPuuuuuTJo0KTvvvHOSz0NWhxxySI477rgMHjw4Tz/9dOnxxo8fn//93//NVVddlTFjxmTSpEn561//WuPfoDbtllYbAwYMqPRF13333ZcBAwaUblc1V6yNZa03Vl5z5sypco5X3Txu0aJFOf744/P9738/9913X7p3716rL1+Kl//bbrvtSqGqDTbYoNq+VHj44Ydz0003ZcSIEenfv/8Sj3/22Wdn4cKFOeecc2r1+qubi1Z1vCRJ+vbtmyZNmuSiiy6qdImbJ554IqeffnpOO+20XH/99bnrrrtKl9Ctay0/9NBDGTNmTK677rr8/ve/z3333VcKM7Lq2XTTTbPFFlvkpz/9aY444og0bty42vHo5Zdfztlnn53zzz8/f/7znzNr1qz8/ve/r/SYl156aWbOnJmLLrqoFHyobj6WfD6+duvWLd26dcujjz5a+v2jjz6au+66K8l/LhNa8WXWjBkzss4665Tuu84662TkyJEpKytbrmMX999/f0aNGpXLLrssN9xwQ+69994kNdfMLbfckmbNmmXcuHFp3bp1fvvb3yapefxj5bey1El1rrjiivTo0SN33XVXZs+eXXq+L9bJJptskh//+Me1fu3Dhw9Ply5dctFFF9Vq25VXXpl77rkn11xzTU4//fSccsopmTp1amn7BRdckEGDBuXWW2/Niy++mD/+8Y/p2rVrJk2alDPOOCM9evTIpEmTKr0PJMl///d/Z8stt0zfvn3TpUuXHHDAAUmS0aNH54UXXsjvf//7/OQnP8kpp5ySF154ocbXdd555+XVV1/NrbfemkMOOSTHHntsrU4K5T9WhroYPHhwdthhh/z3f/93hg0btkyrbVdVM9dcc03uvffeXH311fntb3+bm2++Offdd1+Smvfvqpx77rlp0qRJ/vKXv+TEE0/MiBEjsmDBgiSffwZq1apV/vrXv2bo0KGlue2hhx6aSZMmZffdd8/QoUMzadKkKi+v9+KLL+bxxx9P7969S7975ZVXcuGFF+aYY44phSsWLVqUo446Ku3atcvdd9+d7bbbLkcccUQ++eSTJJ8H+EeNGpVHH300n376aQ444IDcc8891bZbln4W1dSX5PN59KhRozJq1KhcffXVpRPX+Y+VoQ6rO65WnermeEnV86rq5n+1Ud1xvKq2VQSuXn311UonxtR1blhdu9dffz2/+tWvct1112XAgAF58skn85e//CXNmjWr8T1o3rx5GT58ePr375/TTz+9Vn8Pvn6EqmAV8+ijj6Zbt25ZY4010rlz59JZaC+++GJ23nnnbLrpptlkk03y7rvvZu21184f/vCHdO7cOfvuu286dOiQwYMH+6KJBtGoUaMaz8JdY401Mn/+/LRo0SIjR47MhRdemOTzL8Arlrqt+P/VV189yefLWP/tb3/LLrvskrfeeiufffZZ3nzzzdJjfvLJJ7nggguy0UYbZb/99sv06dOTJH/4wx/Ss2fP7LPPPmnbtm1OPvnk7LfffqVt1dXNwIEDM3bs2IwdOzY33njjEq+jvLw8p5xySnr16lW6DEfFwYbevXunS5cuOe6443LzzTeX2uy///7p2LFjtt1222y22Wb5xje+UfqQeMQRR5Se7/jjjy+1qetjjh07Nvvvv3+6d++e7t27p2/fvt4XvqLKysqywQYbZPz48aUPLnPmzEnz5s0zfPjwbLDBBjn99NPz5ptv5tlnn03yec2cddZZ6dSpUwYPHpzPPvss//rXv7LmmmuWLi3TtGnTtGzZMmuuuWbpuapqV50WLVpk++23Lx0ov++++7LrrrvW6rXVpbbvvvvudO/ePfvvv3823HDDjBw5Mvfff3/prLq99torm2yySdZZZ53stNNOad++fRYsWGAs/Qr64Q9/mEcffbTWB5aq2jcWLFhQ5cGHuu5vyeeXI9prr72y0UYbZejQoaX9ra5jXnWq278rVuCaP39+1l9//dx2223Zf//9k3x+8Oepp54qHfx56qmnSquT1DQ+JUsfK5Nk7ty5pQOEe+21V+n31Y1d9957b4YNG5ZvfvOb2W+//SqtMkLD+vjjj9OzZ8907do1J5xwQs4888xMmTIlTZo0ybHHHpt27drl0EMPXeI99ZNPPsnll1+ePn36pFWrVkmWb+5WVlaWs88+OxtuuGH23nvvUm20aNGidBmxiv9v0qRJqd1JJ52Uv/zlL2nfvn1++MMflsar3r17Z/z48Wnbtm1ee+21lJWV5Y033qjx71GbdkurjZ133jkvvPBCZsyYkTlz5uTxxx+v9KVyVXPFmtSl3lh5jR8/vso5Xk3zuLvuuiuHHXZYpk2bljlz5lQaW6rSrl27zJgxIx9++GG6deuWF154IfPmzUubNm2q7UuFqVOn5ne/+1122GGHtG3bttJjX3XVVbnpppsycuTIWl/WsLq5aFXHS5LPP6fuv//+adWqVSlYmCR33nlndtppp+ywww7p1KlTpdBuXWt5zTXXzKJFizJ//vx861vfygMPPFDpOVn1DB48OIsWLcree++dpPrxaKONNsrDDz9cWpl38eLFS9RaixYtMmrUqGy99dalS3xWNx+bN29ennzyyXTr1i3du3fPiy++WDqZba211ipd9rniMqEV89YFCxZUeSmh5Tl2sf/++6dbt27p2bNnBg4cWFrtsaaaadu2bX7yk5+kffv22X333UvjdE3jH6uGhq6TmnTr1i2HHnpoOnbsmP79+5dWVqyuTmrje9/7XoYNG5Ytt9yyVtvGjh2bI444Ip06dUq/fv3SuXPnSqsr77LLLtljjz1SXl6ebbbZJu+9917KysrSsmXLNG3aNKuttlpatmyZtdZaq9JzXXLJJaUTCk455ZTSWHTbbbfl1FNPzcYbb5z+/ftn9913zy233FLta1q0aFHGjRuX4447Lh07dszgwYOzxhprCN/XQUPXxeqrr57zzz8/d955ZxYtWpT99tuv0kkk1amqZu64444cd9xx2XTTTdOlS5f88pe/TMeOHZPUvH9X5ayzzsoll1yS2bNn5/33388nn3xSOqay5pprZuHChWnUqFH222+//O1vfyu9torPdWussUZatmyZZs2aVXrcvn37ZosttsgPfvCDDBkyJFtttVVp26uvvppf//rX2WWXXdKhQ4ckyeTJkzN16tScfvrp2WCDDTJ8+PA0bdo048ePT5LstNNOpZOB9t1333zzm9/MggULqm1Xm34uTU19SZKjjz46W2yxRXbeeeesu+66lVaM5T8aug6rO65WnermeEnV86rlHdeqOo5X3bby8vK89tprS4Sq6jo3rK7dSy+9lG9/+9vZdNNNs9NOO+XVV1/NOuusk7Kyshrfg95///0MGzYsBxxwQDbbbLM6/434aqvdkQlgpfHII4/kgw8+yL333ptPP/00a621Vo444oh06NAhzzzzTP7rv/4rb775ZjbZZJMkn6eP//GPf6Rnz55JPl/6sTaTM1iRFi5cmA8++GCJ1Ty+6OKLL86ll15aWv72tNNOq/GL0cWLF+eiiy7Kvffem0022SQtWrSodAb0xhtvXErgF78ke++997LBBhuUbrdt27Z0ML+mumnRokXat29fZZ+KS6NWmD59eukMhSTZcMMNK32gKV466ovWXnvt0vP913/913I/5owZM/L000+XDozOmzdvqWeH89VQXl6eP//5z+nVq1cmTJiQxo0bV9p/V1999ay33nqZPn16WrVqlbXXXjubbrppaVuSWl2WpK7tBgwYkGuvvTZHHHFEHnzwwZxwwgm1el11qe3p06dXeu1t2rTJ6quvXvpgVl3NGEu/Wjp06JDtt99+ibPKKnxxlbWq9o2WLVsu8SVqnz59cu6559Z5f0tS6SBKmzZt8v777yep+5hXner27/bt2+ecc87JRRddlDfeeCPbb799zjzzzLRu3Trrr79+/vznP2fXXXfN/Pnzc8stt6RXr15Jah6fkqWPlcnnq1wNGjQo48ePz4svvpjvfOc7pX5WNXYVLzdV8XysHJo3b56xY8emSZMmWW+99dKoUaNceeWVmTVrVunA9aJFizJnzpzMmzevVA+DBw9eYh9enrlbxUkpSe1r4/XXX8/aa6+dDh065Oc//3k6duyYCy64IDvvvHM++OCDnHrqqXnllVey+eabl76cqklt2i2tNlq1apVevXrl3nvvTatWrbLZZpulTZs2pe1VzRVrUpd6Y+X1xXGnOMfr1q1ble0aN26ca6+9Nrfffnvat2+fDTbYoFb7c7t27fLCCy+kc+fO6dChQ55++umsu+66pbGupr7sueeeS3zxW+GWW27JgAEDct1111VaGbU61c1FqzpeUqH4xUSFGTNm5PHHHy+9r3z22WelLwLqWsu9evXKkUcemREjRmTmzJnZZZddctppp5lXrsLWWmutNGnSpLTPVTceffrppzn99NMzadKkfOc730lZWVmt9pvq5mNPPPFEPv300xx11FFp3LhxFi9enEcffbTSJdar6nfFZamT5I033sj3v//9TJ48ebmOXXxxDlvxZWNNNVMxh0wqj9M1jX+sGhq6TmpSXKGmSZMmpbHji3Xy8MMP5+STT15iJajk86D6F1X1eaeqbTNmzMjo0aNLq1d9+umnlYIeVfWzJuutt16+853vZNNNN81tt92W4cOH54MPPsi8efOWqPWawlGzZs3K/Pnz8z//8z+lL+Y/+eSTTJs2rVZ94T8aui5efvnlrL/++vnOd76Tq666Kqeeemp+8YtfLLHC9NJUtS9+8fNaxWupeH3V7d9VeeyxxzJq1Kg0a9asdP+KS3396Ec/ygUXXJCBAwfmG9/4Ro4++uhKJ4pU58Ybb8zaa6+d9dZbb4kT5fr27bvEcf/p06dnvfXWK/17JZ//fb94fOeL/19Tu7qo7jG32GKLJMnWW29d2rb66qu73HQVGroOqzuutjyqmldVN//7ohUxriXJt771rbz99tuZO3dupUs413VuWF27jh075o033si///3vTJ48udJnvpreg1q3bp3ddtutytcHiVAVrFJee+21zJgxI7feemvp4MmZZ56Z+fPn59vf/nbOOeec/OxnP8uBBx5YOpjYtm3b9OvXLyeffHKSz7+0WNqACPVp4sSJadSoUbUp708++SRz587Ntddem/nz5+eXv/xlfvrTn2bcuHGl+yxttas//OEPmThxYv7+97+nefPmufHGGytdX/2LB8crrL/++pk4cWLp9htvvJEf/ehHGTNmzHLXzReXP614vuKSom+//XatzjyoTl0fs23bttl3331L1wqfP39+rb9gZNVTXl5eug76hAkTsnjx4rzzzjul7fPmzcvMmTPTrl27fPrpp1XWTIWqVp2rqV1V+vXrl9NPPz1jxoxJhw4dSmeB1aQutd2uXbtMmDChtG3GjBmZP39+jUsrG0u/mg4++OAMGTIkSTJt2rTSgbkkef7552v1GN/5znfyhz/8IYsWLUrjxo3zySefZNasWWnXrl2d97ckeffdd0v/P23atKy77rpJ6j7mVae6/fu9994rvYd8+OGHOeGEE3LFFVfkZz/7WelgaYcOHTJv3rwkKb222oxPSxsrk2TLLbfM2WefnWuvvTY///nPc/XVV5f6WdXY1bp168ycObPS3+yb3/zmMv8tWPG+GORNPv+33GyzzXLxxRcn+Tz0MHv27EpnM1Y1l6rr3K0uY9uFF16YLl26ZPjw4UmSbbbZJtdff32Szy9N3bp160yYMCGNGjWqdSC4Nu2qqo0BAwbk7rvvznrrrVfrVR1rUpd6Y+XVrl27Kud4FZa2rz/++OO56aabcu+992adddbJ3//+91pd/qficTfccMO0atUqzZs3L40NtelLdUGiq666KmussUZ22223HHzwwdWe0FKhujqv6nhJddq2bZvBgwfnkEMOSfL5md0VB+zrWstvvfVW+vXrl6FDh2bGjBkZMmRIbr755hx++OE19odVQ3Xj0f/93/9l1qxZeeSRR7L66qtn9OjRpVWlKixtv6luPvbII49kyy23LF2y89xzz80jjzxSClVVhB4WL16cRo0alR6zc+fOee6550q3p06dmv/6r//KmmuuuVzHLopz2OnTp5fmsDXVTHX1Wx/jHw3ry66TmlS1/1XUScV8aOrUqZVq4YufH7/4Oa+6cW5p29q2bZsTTjihFIqYN29epb5VVycVocrqHHDAAbniiityzDHHlOp96tSppTqtTa23atUqq6++eq688srSyQ1z586tVXiN6n3ZdfGTn/wkhx12WGmFnq233jrXXXddrfpa1b7Ytm3bvPPOO6V9+He/+10++eSTnHDCCTXu30szb968nHrqqbnsssuyww47ZO7cubnttttK2996662ceeaZWWuttTJ+/PgMHz48ffr0KZ1oVt1VM9q1a1dasfiLllaf7dq1y8yZMzN//vxSAOedd95Ju3btqr10YnXtKtTm6h7L+ph1PUb7dfdl12F1x9VqUtUcL6l5XKtQnP81atSoxuOiVR2rqG5bWVlZWrdunXfffbfS6sR1nRtW126dddZJ8+bN06dPnzRr1iy/+tWvSttqeg+q+BtAdVz+D1YhDz/8cDp27Jgtttgi7du3z0477ZSFCxfmrrvuyqRJk0oHQkeMGFFqs/vuu+eJJ57IW2+9leTzwb+4HerLokWL8v7772f8+PEZMWJEDjzwwCrPRK64/7Bhw3LXXXflgw8+SOPGjZdI+3fs2DEPPfRQZs6cmcceeyxJStcL//DDD/P3v/89v/71r2v1QWS33XbLk08+mTFjxmT69On59a9/ndatW6dx48b1Ujc/+MEPct1112XixIn5xz/+kcsvv7x0XfYv+zH32muv/PGPf8ycOXPy6aef5owzzqhytRZWfRVn1Ff8t1mzZpkzZ04uv/zyvPvuuzn33HOz0UYbVbr2enU6duyYRx99NDNnzsyjjz5a6QNXXTRv3jzf/e53c+GFF66Qg+TV1fYee+yRp59+OrfeemumTp2aM888M/379690PfmlMZZ+NW277bal4E2bNm3y2muv5cMPP8z7779fChbUZMcdd0yjRo0yatSovPPOOxk9enQ6duyYTTbZpM77W5I888wzufPOO/Pmm2/mqquuys4775yk7mNedarbv1977bUMHTo0Tz75ZObOnZtGjRqVxuaKA+4bbrhhKQxZ8bvlGfM23HDDNG7cOAceeGBefvnl0nhf3di144475qqrrspbb72VsWPH1vqyBTSMHXbYIdOmTcuzzz6bsrKy/OlPf8qQIUNq3Jfrc+7WsWPH/P3vf8+MGTMyadKkJJ+vOnfrrbfmmWeeydSpU3PllVeWLtP1ySefZNGiRfnnP/+ZG264Iffee2+tarGu7ZLPLykxefLk/P3vfy99ube86lJvrLx22GGHGud4S5vHVYwtH3/8cZ588smcf/75tdovmzdvXlrNLfl8f6oYB2rTl+p07Ngxbdu2zd57751LLrlkGf8SlU2dOrXK4yXV2WuvvXL//ffn/fffz8KFC/OLX/yi1Je61vKECRNy3HHH5R//+Efmz5+fJLVaFYxVR3XjUUWtffDBBxk3blxuuummWu031c3HHnnkkWy//fZp37592rdvn+9973uVVtFZd91106xZszzwwAN5991388wzzyT5fEXI++67L2PHjs2bb76ZK664ojTfXJ553G233Zann346TzzxRP74xz9WmsOuTOMfDevLrpO6OvDAA/P73/8+f/vb3/LSSy/lf//3f0v7YNu2bfPUU08l+Xzlz6Wt8rGs9tprr4wZMyYLFizIv//97wwfPjz33ntvrdp26NAhr7zySt5666289tprmTJlyhL32X333TN79uw89NBDady4cfbbb7+MGjUqr7/+eu6777788Y9/rPGSiRXHVW677bY0atQo06dPzyGHHLJCXv/X3ZddF3369Mm1116bl19+OVOmTMn111+/3JckHjRoUC6//PK89NJLef7553PDDTdk4403TlLz/v2vf/0r7733Xunno48+ymeffZbPPvssc+fOzeuvv54TTzwxyX9WIr3oooty+eWXl1ZKW9r3CJMmTcrMmTPz1FNP5cMPP6zza9t8883ToUOHnHPOOXn33Xdz+eWXZ+7cudlhhx2Wu92y9rOufaFmX3YdVndcrSZVzfGqU938r02bNnn66aezePHiPP3007nvvvtq1Y/aKC8vT6dOnSr9rj6Oqdx8883Zbrvtctddd2X8+PGVVqJanjEWKghVwSrk0UcfrbR0Z/PmzbPFFlvk9ddfzzrrrJODDjooO+64YzbffPOcccYZST4fkEeNGpVRo0Zl9913zyuvvFI6Kxzq0yuvvJLtt98+55xzTgYPHlxK+FelRYsWufDCC/Ob3/wmO+20U8aPH5+zzjqr0n1OPvnkPPTQQ9lxxx1z+eWXJ/l8QrTRRhtl1113za9+9av84Ac/yOuvv15K91elffv2ueKKK3Lttddmt912y0cffZTzzjsvSf3Uzc4775xjjz02p5xySoYNG5aBAwdWu2RqfT7mHnvskQEDBuTII4/M4MGD0759+xx//PHL1RdWXptuummlS1Y2a9YsV199dR5++OEMHDgw06ZNyxVXXFHra6ofc8wxmTZtWnbcccecddZZK+SLoAEDBmT27NkZMGDAcj9WdbXdtm3b/Pa3v82NN96YvffeO82aNcv5559f42MaS7+6Kt4zt95662y//fYZOHBgjjrqqPzP//xPrdo3b948V199dZ599tnstttumTJlSn7zm9+kUaNGdd7fks+Xmx87dmwGDRqUDh065Nhjj01S9zGvOtXt33369MkPfvCDnHDCCdlll12yePHiHHXUUUmSDTbYII0bN86GG25YumxExRl1K2LMW3PNNTNs2LBceOGFWbx4cbVj1//8z/+kbdu22WeffXLHHXfku9/9bp3/HtS/li1blt6nBwwYkHvvvTe//vWvK61UtTT1OXc766yzct1112WnnXYqXfJu8ODB2WOPPTJ8+PDss88+adGiRU4//fQkn4+Fb7zxRgYMGJCJEydm1113zT/+8Y8an6eu7ZLkG9/4Rnr37p0uXbrUKpy5LJal3lh5VYxJ1c3xljaP23777dOvX7/ss88+Oeuss7L//vtn5syZpUvPVqddu3alLwA6dOhQ+hKgNn2pjSOPPDL3339/XnzxxWVqV7TBBhtUebykOj179sxxxx2Xk08+OXvttVc+++yznHnmmUnqXsv77LNPevbsmSOOOCJ77LFHNtpooxxwwAF1fm2sfKobjw4++OAsXrw43//+9zNmzJjsu+++tdq3q5qP/etf/8rLL79c6Tjhdtttl/fee68UqGjSpEnOOeecnHXWWdltt91KX5BVrBj5q1/9KoMGDcpGG22UU045JcnyzeMGDBiQn/70pxk+fHgOPvjg9O3bN8nKO/7RML7MOlke/fv3z09+8pP87Gc/yyGHHJK+ffvmsMMOS5IMGzYskydPzs4775wHHnigtKrh8hg6dGg6deqUAw88MEOGDMkOO+xQ6zGiR48eGTRoUPbZZ58ceOCBS1yiPvl8FZE999wzt9xyS5Lkxz/+cTp37pwDDjggF154YS644IJ06dKlxucaMWJEGjdunH322Sc/+tGPcthhh5Vqnbr7suti+PDh2XzzzXPwwQfnhz/8YTbbbLPScYe6Ovzww7PTTjvl8MMPz1FHHZXBgweXVk6saf8+4ogj8r3vfa/08/Of/zwtWrTIySefnDPPPDOHHXZYevfunbXWWqv02keOHJnnn38+u+22W84888z87Gc/qzROHHjggVlzzTXTv3//nHjiiaVQTF00btw4V1xxRaZNm5aBAwfmkUceydVXX13jJZxr025Z+1nXvlCzL7sOqzuuVpOq5njVqW7+d8ABB+STTz5J//7985vf/Ka0YveKsOmmm5ZO9q5QH8dU+vXrl3HjxmW//fZLjx498r3vfS8PPPBAkuUbY6FCo8UupgqrvNtuuy1/+ctfcs4552TNNdfMSy+9lGHDhuWxxx6z1CcAK7WpU6fmiSeeyK233pqbbrqpobsDDe6yyy7Lu+++m1GjRjV0V4CVxEcffZS5c+fm9NNPz84775z99tuvobsEqwzHS+DLcdBBB2XvvffOPvvss8Ie0/gHAEBt/Pd//3cGDhyYXXbZJQsWLMhVV12V6dOn57LLLmvorvEVUf2poMAqYeutt84f/vCH7L777pk3b1422GCDnHrqqQ4QArDSO+aYYzJr1qxceumlDd0VAFgpvfHGGznwwAPTo0ePDBw4sKG7A6sUx0tg1WX8AwCgNvbff//85je/yXnnnZfVVlstXbt2zWmnndbQ3eIrxEpVAAAAAAAAAAAABY0bugMAAAAAAAAAAAArE6EqAAAAAAAAAACAAqEqAAAAAAAAAACAAqEqAAAAAAAAAACAAqEqAAAAAAAAAACAAqEqAAAAAAAAAACAAqEqAAAAAAAAAACAAqEqAAAAAAAAAACAgv8PxS9S3SFNp+wAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "model = RandomForestClassifier(n_estimators=100)\n",
    "model.fit(data[[\"Age\",\n",
    "                \"DistanceFromHome\",\n",
    "                \"MonthlyIncome\",\n",
    "                \"NumCompaniesWorked\",\n",
    "                \"PercentSalaryHike\",\n",
    "                \"TotalWorkingYears\",\n",
    "                \"YearsAtCompany\",\n",
    "                \"YearsInCurrentRole\",\n",
    "                \"YearsSinceLastPromotion\",\n",
    "                \"YearsWithCurrManager\"]], data[\"Attrition\"])\n",
    "print(model.feature_importances_)\n",
    "# 用bar进行展示\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.figure(figsize=(30, 15))\n",
    "plt.bar([\"Age\",\n",
    "         \"DistanceFromHome\",\n",
    "         \"MonthlyIncome\",\n",
    "         \"NumCompaniesWorked\",\n",
    "         \"PercentSalaryHike\",\n",
    "         \"TotalWorkingYears\",\n",
    "         \"YearsAtCompany\",\n",
    "         \"YearsInCurrentRole\",\n",
    "         \"YearsSinceLastPromotion\",\n",
    "         \"YearsWithCurrManager\"], model.feature_importances_)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T08:54:17.304713500Z",
     "start_time": "2025-06-07T08:54:16.857231100Z"
    }
   },
   "id": "286bf13d85f0b731"
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "outputs": [],
   "source": [
    "d1 = data.iloc[:, 1:].drop([\"EmployeeNumber\", \"Over18\", \"StandardHours\"], axis = 1)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T09:15:06.166239500Z",
     "start_time": "2025-06-07T09:15:06.160507700Z"
    }
   },
   "id": "7080d8cfb2391e9f"
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'numpy.ndarray' object has no attribute 'columns'",
     "output_type": "error",
     "traceback": [
      "\u001B[31m---------------------------------------------------------------------------\u001B[39m",
      "\u001B[31mAttributeError\u001B[39m                            Traceback (most recent call last)",
      "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[71]\u001B[39m\u001B[32m, line 33\u001B[39m\n\u001B[32m     31\u001B[39m model.fit(X_train, y_train)\n\u001B[32m     32\u001B[39m importances_mdi = model.feature_importances_\n\u001B[32m---> \u001B[39m\u001B[32m33\u001B[39m feature_names = X.columns\n\u001B[32m     35\u001B[39m \u001B[38;5;66;03m# 排序并输出 MDI 结果\u001B[39;00m\n\u001B[32m     36\u001B[39m importance_df_mdi = pd.DataFrame({\n\u001B[32m     37\u001B[39m     \u001B[33m'\u001B[39m\u001B[33mFeature\u001B[39m\u001B[33m'\u001B[39m: feature_names,\n\u001B[32m     38\u001B[39m     \u001B[33m'\u001B[39m\u001B[33mImportance\u001B[39m\u001B[33m'\u001B[39m: importances_mdi\n\u001B[32m     39\u001B[39m }).sort_values(by=\u001B[33m'\u001B[39m\u001B[33mImportance\u001B[39m\u001B[33m'\u001B[39m, ascending=\u001B[38;5;28;01mFalse\u001B[39;00m)\n",
      "\u001B[31mAttributeError\u001B[39m: 'numpy.ndarray' object has no attribute 'columns'"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.inspection import permutation_importance\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 加载数据\n",
    "# X = data[[\"Age\",\n",
    "#           \"DistanceFromHome\",\n",
    "#           \"MonthlyIncome\",\n",
    "#           \"NumCompaniesWorked\",\n",
    "#           \"PercentSalaryHike\",\n",
    "#           \"TotalWorkingYears\",\n",
    "#           \"YearsAtCompany\",\n",
    "#           \"YearsInCurrentRole\",\n",
    "#           \"YearsSinceLastPromotion\",\n",
    "#           \"YearsWithCurrManager\"]]\n",
    "# 去除EmployeeNumber列 、Over18列、 StandardHours列\n",
    "X = d1\n",
    "# 对X 标准化\n",
    "X = StandardScaler().fit_transform(d1)\n",
    "y = data['Attrition']\n",
    "\n",
    "# 划分训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "\n",
    "# 训练模型并获取特征重要性（通过MDI评估）\n",
    "model = RandomForestClassifier(n_estimators=100, random_state=42)\n",
    "model.fit(X_train, y_train)\n",
    "importances_mdi = model.feature_importances_\n",
    "feature_names = X.columns\n",
    "\n",
    "# 排序并输出 MDI 结果\n",
    "importance_df_mdi = pd.DataFrame({\n",
    "    'Feature': feature_names,\n",
    "    'Importance': importances_mdi\n",
    "}).sort_values(by='Importance', ascending=False)\n",
    "print(\"MDI Feature Importance:\")\n",
    "print(importance_df_mdi)\n",
    "\n",
    "# 可视化 MDI\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.barplot(x='Importance', y='Feature', data=importance_df_mdi)\n",
    "plt.title('Random Forest Feature Importance (MDI平均不纯度减少)')\n",
    "plt.xlabel('Importance')\n",
    "plt.ylabel('Feature')\n",
    "plt.show()\n",
    "\n",
    "# 计算置换重要性（Permutation Importance）\n",
    "result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=42)\n",
    "importance_df_perm = pd.DataFrame({\n",
    "    'Feature': feature_names,\n",
    "    'Importance': result.importances_mean\n",
    "}).sort_values(by='Importance', ascending=False)\n",
    "print(\"Permutation Feature Importance:\")\n",
    "print(importance_df_perm)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-06-07T09:14:07.536678300Z",
     "start_time": "2025-06-07T09:14:07.329694900Z"
    }
   },
   "id": "b2331dde83a94458"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# \n",
    "X1 = data[[\"BusinessTravel\", \"Department\", \"EducationField\", \"EnvironmentSatisfaction\", \"JobInvolvement\", \"JobLevel\",\n",
    "           \"JobRole\", \"JobSatisfaction\", \"MaritalStatus\", \"OverTime\", \"StockOptionLevel\", \"WorkLifeBalance\",\n",
    "           # 手工加的\n",
    "           \"Age\",\n",
    "           \"DistanceFromHome\",\n",
    "           ]\n",
    "]\n",
    "X1 = StandardScaler().fit_transform(X1)\n",
    "# 切分数据集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X1, data[\"Attrition\"], test_size=0.3, random_state=42)"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "69470092560602a2"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "# 使用逻辑回归 计算AUC\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "model = LogisticRegression(\n",
    "    # 逻辑回归的solver参数，liblinear是逻辑回归的默认参数，这里设置成liblinear\n",
    "    solver='liblinear',\n",
    "    random_state=42,\n",
    "    # 正则化\n",
    "    C=1.0,\n",
    "    # 逻辑回归的penalty参数，l2是默认参数，这里设置成l2\n",
    "    penalty='l2',\n",
    "    # 逻辑回归的max_iter参数，默认是100，这里设置成1000\n",
    "    max_iter=1000,\n",
    "\n",
    ")\n",
    "model.fit(X_train, y_train)\n",
    "from sklearn.metrics import roc_auc_score\n",
    "\n",
    "roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5d316af598cdbcb1"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "# 使用KNN\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "model = KNeighborsClassifier(\n",
    "    n_neighbors=13,\n",
    ")\n",
    "model.fit(X_train, y_train)\n",
    "roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5d00cce6cf58e171"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "# 使用决策树\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "model = DecisionTreeClassifier(\n",
    "    max_depth=9,\n",
    "    random_state=42,\n",
    "    min_samples_leaf=5,\n",
    "    # 模型\n",
    "    criterion=\"gini\"\n",
    ")\n",
    "model.fit(X_train, y_train)\n",
    "roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "e1f504ae59dcff18"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder, StandardScaler\n",
    "from sklearn.metrics import roc_auc_score, classification_report, roc_curve, auc\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from xgboost import XGBClassifier\n",
    "\n",
    "# 读取数据\n",
    "data = pd.read_csv(\"../../data/raw/train.csv\")\n",
    "# 数据预处理  将有多分类的列 转化为 数值型的\n",
    "label_encoder = LabelEncoder()\n",
    "data = data.apply(label_encoder.fit_transform)\n",
    "\n",
    "# 选取特征列  12 + 9列\n",
    "# 上边通过卡方检验 选出了 12列\n",
    "# 下边通过 随机森林 + 置换重要性选出了 9列\n",
    "X = data[[\"BusinessTravel\",\n",
    "          \"Department\",\n",
    "          \"EducationField\",\n",
    "          \"EnvironmentSatisfaction\",\n",
    "          \"JobInvolvement\",\n",
    "          \"JobLevel\",\n",
    "          \"JobRole\",\n",
    "          \"JobSatisfaction\",\n",
    "          \"MaritalStatus\",\n",
    "          \"OverTime\",\n",
    "          \"StockOptionLevel\",\n",
    "          \"WorkLifeBalance\",\n",
    "\n",
    "          \"Age\",\n",
    "          \"DistanceFromHome\",\n",
    "          \"YearsSinceLastPromotion\",\n",
    "          \"YearsInCurrentRole\",\n",
    "          \"NumCompaniesWorked\",\n",
    "          \"MonthlyIncome\",\n",
    "          \"YearsWithCurrManager\",\n",
    "          \"PercentSalaryHike\",\n",
    "          \"TotalWorkingYears\",\n",
    "          ]\n",
    "]\n",
    "y = data[\"Attrition\"]\n",
    "# 对X 标准化\n",
    "scale = StandardScaler()\n",
    "scale.fit(X)\n",
    "X = scale.transform(X)\n",
    "\n",
    "# 划分数据集\n",
    "# 使用XGBClassifier 进行模型训练\n",
    "es_xgb = XGBClassifier(\n",
    "    # learning_rate=0.1,\n",
    "    random_state=3,\n",
    "    n_estimators=300,\n",
    "    max_depth=3,  # 2\n",
    "    min_child_weight=2,\n",
    "    gamma=0,\n",
    "    reg_alpha=0,\n",
    "    reg_lambda=1.0,\n",
    "    objective='binary:logistic',\n",
    ")\n",
    "\n",
    "es_xgb.fit(X, y)\n",
    "y_pred = es_xgb.predict(X)\n",
    "\n",
    "print(\"AUC:\", roc_auc_score(y, y_pred))  # AUC: 0.9005011257171909"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f0815ebac95668e9"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
